package com.dragon.geekbang.thinking.in.spring.bean.definition;


import com.dragon.geekbang.thinking.in.spring.ioc.container.overview.domain.User;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.GenericBeanDefinition;

/**
 * {@link org.springframework.beans.factory.config.BeanDefinition}
 */
public class BeanDefinitionCreationDemo {
    public static void main(String[] args) {

        // 1.通过 BeanDefinitionBuilder 构建
        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);

        // 通过属性设置
        beanDefinitionBuilder.addPropertyValue("id", 1L);
        beanDefinitionBuilder.addPropertyValue("name", "黄飞鸿");

        // 获取 Beandefinition
        BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();

        // BeanDefinition 非终态  可修改
        System.out.println(beanDefinition);

        // 2.通过 AbstractBeanDefinition 及其派生类构建
        GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
        genericBeanDefinition.setBeanClass(User.class);

        MutablePropertyValues mutablePropertyValues = new MutablePropertyValues();
//        mutablePropertyValues.addPropertyValue("id", 2L);
//        mutablePropertyValues.addPropertyValue("name", "赵云");
        mutablePropertyValues
                .add("id", 3L)
                .add("name", "张飞");
        genericBeanDefinition.setPropertyValues(mutablePropertyValues);

        System.out.println(genericBeanDefinition);

    }
}
